package com.example.gateway.designPattern.adapter;

import com.example.gateway.designPattern.adapter.Projector;
import com.example.gateway.designPattern.adapter.classAdapter.ClassAdapterUSB2VGA;
import com.example.gateway.designPattern.adapter.interfaceAdapter.AbsAdapterUSB2VGAImpl;
import com.example.gateway.designPattern.adapter.objAdapter.ObjAdapterUSB2VGA;

/**
 * @ClassName: Client
 * @Description:
 * @Author: YourName
 * @Date: 2024/12/30
 */

public class Client {
    public static void main(String[] args) {
        /*
        * 适配器模式：将一个类的接口转换成客户希望的另外一个接口，使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
        *   就以现在市面上的充电口为例 USB Type-C Lightning， 而适配器就相当于转接头
        *  主要分为三类：
        *   类的适配器模式
        *     当希望将一个类转换成满足另一个新接口的类时，可以使用类的适配器模式，创建一个新类，继承原有的类，实现新的接口即可。
        *   对象的适配器模式
        *     当希望将一个对象转换成满足另一个新接口的对象时，可以创建一个Wrapper类，持有原类的一个实例，在Wrapper类的方法中，调用实例的方法就行。
        *   接口的适配器模式
        *      当不希望实现一个接口中所有的方法时，可以创建一个抽象类Wrapper，实现所有方法，我们写别的类的时候，继承抽象类即可。
        *
        *
        * 使用选择：
                根据合成复用原则，组合大于继承。因此，类的适配器模式应该少用。
        */
        //接口的适配器模式
        Projector projector = new Projector();
        // 类的适配器模式
        ClassAdapterUSB2VGA adapterUSB2VGA = new ClassAdapterUSB2VGA();
        projector.projection(adapterUSB2VGA);

        // 对象的适配器模式
        ObjAdapterUSB2VGA objAdapterUSB2VGA = new ObjAdapterUSB2VGA();
        projector.projection(objAdapterUSB2VGA);

        // 接口的适配器模式
        AbsAdapterUSB2VGAImpl absAdapterUSB2VGA = new AbsAdapterUSB2VGAImpl();
        projector.projection(absAdapterUSB2VGA);

    }
}
